function validateCleanText(field,rules) {
	var val = strip_tags(field.val());
	if(parseInt(rules[3])>val.length) {
		return "Минимум "+rules[3]+" символ(а)";
	} else if(parseInt(rules[4])<val.length) {
		return "Максимум "+rules[4]+" символ(а)";
	}
}

function addTag(but) {
	var tags=but.parent().parent().parent();
	var tag=$('span.tag:last',tags);
	if(tag.length==1) {
		$('a.but',tags).button('enable');
	};
	var t=tag.clone();
	function doItOne(t) {
		t.appendTo($('div.tags',tags));
		initAutocompleteInputs(t);
		var b =$('.but',t);
		var text=$('span.ui-button-text',b).text();
		$('span',b).remove();
		b.text(text);
		initButton(t);
		var n = $('select , input',t).data('name');
		n++;
		$('select , input',t).val('').attr('name','tags['+n+']').attr('data-name',n);
	};

	if(tag.length==0) {
		$.post('tag/new_one', function(e) {
			t=$(e);
			doItOne(t);
		});
	} else {
		doItOne(t);
	};
}

function photoChouse(par,flag) {
	var o 		= $('#person_photo');
	if(!flag) {
		initAjaxFileUpload(par);
		var api = init();
		o.bind('destroyCrop', function() {
			api.destroy();
			$('.jcrop-holder , .jcrop-tracker',o.parent()).remove();
		});
	} else {
		init();
	}
	function init() {
		var o 		= $('#person_photo');
		var src 	= o.attr('src');
		var comment = $('#comment_prev').attr('src',src);
		var report 	= $('#report_prev').attr('src',src);
		var api 	= $.Jcrop('#person_photo', {
			onChange:showPreview,
			onSelect: showPreview,
			aspectRatio:1,
			bgColor:'transparent',
			minSize: [200, 200]
		});
		var w 		= o.width();
		var h 		= o.height();
		function showPreview(coords) {
			$("#person_photo_h").val(coords.h);
			$("#person_photo_w").val(coords.w);
			$("#person_photo_y").val(coords.y);
			$("#person_photo_x").val(coords.x);
			var rx1 = 30 / coords.w;
			var ry1 = 30 / coords.h;
			var rx2 = 66 / coords.w;
			var ry2 = 66 / coords.h;
			comment.css({
				width: Math.round(rx1 * w) + 'px',
				height: Math.round(ry1 * h) + 'px',
				marginLeft: '-' + Math.round(rx1 * coords.x) + 'px',
				marginTop: '-' + Math.round(ry1 * coords.y) + 'px'
			});
			report.css({
				width: Math.round(rx2 * w) + 'px',
				height: Math.round(ry2 * h) + 'px',
				marginLeft: '-' + Math.round(rx2 * coords.x) + 'px',
				marginTop: '-' + Math.round(ry2 * coords.y) + 'px'
			});
		}

		return api;
	}

}

function addComment(r) {
	var $parent = $('body div.comments');
	var $nc 	= $("#newComent");
	if(r.parent) {
		$parent = $("#"+r.parent);
	} else {
		$(r.html).insertBefore($nc);
	}
	initButton($parent);
}

function initDatepicker(par) {
	$('.datePicker',(par||"body")).each( function() {
		var o 	= $(this);
		var opt = {};
		$.extend(opt, (o.data('opt')|| {}));

		o.datepicker(opt);
	});
}

function initAjaxFileUpload(par) {
	var b = $("body");
	if(!b.data('ajaxStart')) {
		b.ajaxStart( function() {
			$.jLoading();
		}).ajaxComplete( function() {
			$.jLoading('stop');
		}).data('ajaxStart',true);
	}
	var o 	= $('.file_upload',par);
	o.but({
		icon:'circle-plus'
	}).click( function() {
		var url = o.data('url');
		var opt = o.data('opt')|| {};
		var id  = o.data('id');
		var postData = opt.postData|| {};
		var callback = o.data('callback');
		if(callback&&callback!="") {
			try {
				callback = eval("(function(d,opt){"+callback+"})");
			} catch(e) {
				if(console&&console.error)
					console.error(e);
			}
		}
		$.ajaxFileUpload({
			url:url,
			secureuri:false,
			fileElementId:id,
			dataType: 'json',
			data:postData,
			success: function (d, status) {
				if(d.state) {
					console.dir(d);
					var o = "#person_photo";
					var crop = $.Jcrop(o);
					o = $(o);
					o.trigger('destroyCrop');
					o.hide('fade', function() {
						if(o.attr('src')!=d.path) {
							o.css({
								width:d.width,
								height:d.height
							}).attr('src',d.path);
							var isLoad = false;
							if(!o.data('bindInit')) {
								o.bind('load',load);
							} else if(!isLoad) {
								isLoad=true;
							}
							function load() {
								o.show(10, function() {
									photoChouse('',true);
									o.css('display','none');
								}).data('bindInit',true);
							}

						} else {
							o.show(10, function() {
								photoChouse('',true);
								o.css('display','none');
							});
						}
					});
					if(callback&&$.isFunction(callback))
						callback(d,opt);
					if(d.msg) {
						$.jAlert(d.msg);
					}
				} else {
					$.jError(d.msg||"Ошибка 109367");
				}
			},
			error: function (d, status, e) {
				$.jError(d.msg||"Ошибка 109367");
			}
		});
	});
}

function initTabs(par) {
	$('.ui_tabs_a',(par||"body")).each( function() {
		var o 	= $(this);
		var opt = {};
		$.extend(opt, (o.data('opt')|| {}));
		o.tabs(opt);
	});
}

function initButton(par) {
	if(!par||par.length<=0)
		par=$('.nav');
	$(".but",par).each( function() {
		var o = $(this),opt = o.data('opt')|| {};
		if(o.hasClass('ui-off'))
			return true;
		if(opt.icon||opt.icon1) {
			opt.icons = {};
			opt.icons[(opt.icon?"primary":"secondary")]="ui-icon-"+(opt.icon||opt.icon1);
		}
		o.button(opt);
	});
	initAutocompleteInputs(par);
	initWYSIWYG_editors(par);
	initDatepicker(par);
	initTabs(par);
}

function initAutocompleteInputs(par) {
	var parent = $('body');
	par = par?$(par):[];
	if(par.length&&par.length>0) {
		parent = par;
	}
	var a_is = $('.autocomplete',parent);
	if(a_is.length>0) {
		a_is.each( function() {
			var o = $(this);
			var source 		= o.data('source');
			var select 		= o.data('select');
			var url 		= o.data('url');
			var minLength 	= o.data('minLength')||1;
			if(url&&typeof(url)=='string'&&url!='') {
				source = function(request, response) {
					$.ajax({
						url: url,
						type:"POST",
						dataType: "json",
						data: {
							maxRows: 12,
							name_startsWith: request.term
						},
						success: function( data ) {
							if(typeof(data)=='object'&&!$.isEmptyObject(data)) {
								response(data);
							}
						}
					});
				}
			}
			if(source&&(typeof(source)=="string")) {
				source = source.split(',');
			}

			if(($.isArray(source)&&source.length>0)||$.isFunction(source)) {
				var data = {
					source:source,
					minLength:minLength
				};
				if(select&&typeof(select)=="string") {
					try {
						select = eval("(function(e,ui){"+select+"})");
						data['select'] = select;
					} catch(e) {
					}
				}
				o.autocomplete(data);
			}
		});
	}
}

function getDialogFromChild(child) {
	var dia = child.parent(),i=0;
	while(!dia.parent().hasClass('ui-dialog')&&(i++)<15) {
		dia = dia.parent();
	};
	if(i==14)
		return false;
	return dia;
}

function initWYSIWYG_editors(par) {
	//$('.WYSIWYG_editor_contener').resizable();
	$("div.WYSIWYG_editor_contener").each( function() {
		var o = $('.WYSIWYG_editor',this).cleditor({
			width:"100%",
			height:"100%",
			controls:"size | bold italic underline strikethrough | link unlink"
		});
		setTimeout( function() {
			o[0].refresh();
		},400);
	});
}

function deleteSection(opt,but) {
	var name 	= opt.name;
	var id 		= opt.id;
	var url 	= but.data('url')||'section/delete';
	$.jConfirm('Вы точно хотите удалить секцию - '+name+'?', function(res) {
		if(res) {
			var section = but.parent().parent().parent().parent();
			$.post(url, {
				id:id
			}, function(d) {
				if(d.state&&d.state==1) {
					section.hide('fade', function() {
						section.remove();
						$.jAlert('Секция '+name+' удалена!');
					});
				} else if(d.msg) {
					$.jError('Секция '+name+' не удалена!<br>'+d.msg);
				}
			},'json');
		}
	});
}

function deleteReport(opt,but) {
	var name 	= opt.name;
	var id 		= opt.id;
	var url 	= but.data('url')||'report/delete';
	$.jConfirm('Вы точно хотите удалить доклад - '+name+'?', function(res) {
		if(res) {
			var report = but.parent().parent().parent().parent();
			$.post(url, {
				id:id
			}, function(d) {
				if(d.state&&d.state==1) {
					report.hide('fade', function() {
						report.remove();
						$.jAlert('Докла '+name+' удален!');
					});
				} else if(d.msg) {
					$.jError(d.msg);
				} else {
					$.jError('Доклад '+name+' не удален!');
				}
			},'json');
		}
	});
}

function blockComment(opt,but) {
	var o = $('.text',but.parent().parent().parent());
	$.post('comment/block',opt.postData, function() {
		o.text('Данный комментарий был заблокирован Администратором...').parent().addClass('blockComment');
		but.hide('fade');
	});
}

function publicateReport(opt,but) {
	var name 	= opt.name;
	var id 		= opt.id;
	var url		= opt.url;
	$.jConfirm('Вы точно хотите опубликовать доклад - '+name+'?', function(res) {
		if(res) {
			$.post(url, {
				id:id
			}, function(s) {
				if(s.state&&s.state==1) {
					but.hide('fade', function() {
						but.remove();
					});
					$.jAlert('Доклад опубликован!');
				} else {
					$.jError('Доклад не опубликован!');
				}
			},'json');
		}
	});
}

$( function() {
	function loadContent(url,historyOff,opt) {
		$('.autoDialog').hide('fade', function() {
			$(this).data('history','off').dialog('close');
		});
		if(url=="")
			return false;
		if(!window.bodyIsInit)
			initMain();
		var obj 	= $.cookie("historyData");
		if(!obj||obj=="") {
			obj="{}";
		}
		opt 	= opt&&typeof(opt)=='object'&&$.isEmptyObject(opt)?opt:eval("("+obj+")");
		if($.isEmptyObject(opt)) {
			opt= {};
		}
		var target = opt.target||null;
		var id_re 		= /\/([0-9]{1,10})\/$/;
		var target_re 	= /(dialog)$/;
		if(target_re.test(url)) {
			target 	= target_re.exec(url);
			target 	= target[1];
			url 	= url.replace(target_re,'');
		} else {
			target = "#tabs-id-section";
		}
		if(id_re.test(url)) {
			var id					= id_re.exec(url);
			$.extend(opt.postData, {
				id:id[1]
			});
			url 					= url.replace(id_re,'');
			if(!target)
				opt.target 	= "#tabs-id-section";
		}

		if(target=="#tabs-id-section") {
			opt.calback = '$("#tabs-content").tabs("select","tabs-id-section");';
		}
		var tar;
		if(target=="dialog") {
			$.extend(opt.diaOpt|| {}, {
				autoOpen:false
			});
			var diaOpt = opt.diaOpt;
			tar = $.dia(diaOpt).bind('dialogShow', function() {
				$.jLoading('stop');
			}).addClass('autoDialog').bind('dialogclose', function() {
				if(history.length>1&&$(this).data('history')!='off')
					history.back();
			});
			if(historyOff)
				tar.data('history','off');
		} else if(target&&target[0]=="#"||target[0]==".") {
			tar = $(target);
		} else {
			tar = $("#content");
		}
		$.jLoading({
			msg:opt.loadMsg||'Загрузка'
		});
		if($.isEmptyObject(opt.postData)) {
			opt.postData= {
				form:true
			};
		} else {
			$.extend(opt.postData, {
				form:true
			});
		}
		$.post(url,(opt.postData|| {}), function(res) {
			if(!res.html||res.html=="") {
				$.jLoading('stop',history.back);
				if(!opt.historyOff)
					history.back();
				if(res.msg) {
					$.jAlert(res.msg);
				} else if(res.error) {
					$.jError(res.error);
				}
				return false;
			}
			if(target=="dialog") {
				tar.dialog('option', {
					title:res.title
				}).html(res.html);
				initButton(tar);
				if(opt.calback) {
					try {
						eval(opt.calback);
					} catch(e) {
					};
				}
				setTimeout( function() {
					tar.dialog('option', {
						width:'auto',
						height:'auto',
						position:'center'
					}).dialog('open');
				},70);
			} else {
				tar.hide(opt.hideEffect||'fade',210, function() {
					var title = document.title.split(' - ');
					document.title = title[0]+' - '+res.title;
					tar.html(res.html);
					initButton(tar);
					if(opt.calback) {
						try {
							eval(opt.calback);
						} catch(e) {
						};
					}
					tar.show(opt.showEffect||'fade',210, function() {
						$.jLoading('stop');
					});
				});
			}
			if(res.callback) {
				try {
					eval(res.callback);
				} catch(e) {
				}
			}
		},'json').error( function() {
			if(target=="dialog") {
				tar.dialog('close');
				$.jLoading('stop');
			}
		});
	};

	initMain();
	window.bodyIsInit = true;
	$.history.init(loadContent);
	initButton("body");
	$('body').ajaxError( function() {
		$.jLoading('stop');
	});
	$("body").delegate('.but','click', function() {
		var o = $(this),url = o.data('url'),opt=o.data('opt');
		if(opt['disabled']||o.attr('disabled')=='disabled')
			return false;
		var self = o;
		var action = o.data('action');
		if(action&&typeof(action)=='string') {
			try {
				var action = eval("("+(/function/.test(action)?action:"function(opt,but){"+action+"}")+")");
				action(opt,o);
			} catch(e) {
				if(console)
					console.log(action+"\n"+e);
			}
		}
		if(!opt.action)
			opt.action="";
		switch(opt.action) {
			case "load":
				$.cookie('historyData',o.attr('data-opt'));
				if(opt.postData&&opt.postData['id']) {
					url+="/"+opt.postData['id']+"/";
				}
				if(!opt.target||opt.target=='dialog') {
					url+="dialog";
				}
				if(!opt.historyOff) {
					$.history.load(url);
				} else {
					loadContent(url,true,opt);
				}
				break;
			case "submit":
				var dia = (opt.formID?$("#"+opt.formID).parent():getDialogFromChild(o));
				var data = {};
				var form = $('form',dia);
				if(!form.is('form'))
					return false;
				var val_res = form.validationEngine('validate');
				if(!val_res)
					return false;
				var data_arr = form.serializeArray();
				for(var i=0;i<data_arr.length;i++) {
					var o = data_arr[i];
					data[o.name] = o.name=="user[password]"||o.name=="user[password_repeat]"?$.krack(o.value):o.value;
				}
				$.extend(data,opt.postData);
				$.post(url,data, function(res) {
					if(res.state) {
						if(res.msg) {
							$.jAlert(res.msg);
						}
						if(opt.calback) {
							try {
								eval(opt.calback);
							} catch(e) {
							};
						}
						try {
							dia.dialog('close');
						} catch(e) {
						}
					} else {
						if(res.error) {
							function showErrors() {
								p:
								for(var i in res.error) {
									var o 	= res.error[i];
									var inp = $('form *[name="'+i+'"]',dia);
									var td  = inp.parent().parent();
									//td.addClass('ui-state-error').addClass('ui-corner-all');//inp.validationEngine('showPrompt', 'Ошибка заполнения поля',"",false,{showArrow:true});
								}
							}

							var errorBlocks = $('form div.field.ui-state-error',dia);
							if(errorBlocks.length!=0) {
								//errorBlocks.removeClass('ui-state-error');//$("input , select , textarea",errorBlocks).validationEngine('hide');
								showErrors();
							} else {
								showErrors();
							}
						}
						if(res.msg) {
							$.jError(res.msg);
						}
					}
					try {
						if(opt.callback) {
							eval(opt.callback);
						}
					} catch(error) {
					};
					try {
						if(res.callback) {
							eval(res.callback);
						}
					} catch(error) {
					};
				},'json');
				break;
			case "login":
				var pas = $("#password").val(),nm = $("#login").val();
				if(pas&&nm) {
					$.jLoading({
						msg:'Авторизация'
					});
					$.post('user/login', {
						password:$.krack(pas),
						login:nm
					}, function(e) {
						if(e.state) {
							$('#user_block').hide('slide',400, function() {
								if(e.reg_but_hide&&e.reg_but_hide!="")
									$('.reg_but').addClass('hide_');
								$('#user_info').html(e.html);
								$("#user_block").show('slide',400);

								var tabs = $('#tabs-content');
								for(var i in e.tabs) {
									var o  	= e.tabs[i];
									var lb 	= o.lb;
									var html= o.html;
									var prev_tab_but = $('a[href="#'+i+'"]',tabs);

									if(prev_tab_but.length>0)
										tabs.tabs('remove',i);
									tabs.data('html',html).tabs( "add", "#"+i, lb);
									$('a[href="#'+i+'"]',tabs).addClass('login_tab');
								}
								if(e.buttons) {
									for(var lb in e.buttons) {
										var o 		= e.buttons[lb];
										var html 	= "<div class='m5'"+(o.title?" title='"+o.title+"'":"")+"></div>";
										var button 	= $(html).prependTo('#main_menu');
										$("<a class='but login_but' data-url='"+o.url+"'>"+lb+"</a>").appendTo(button).data('opt',o.opt);
									}
									window.alignButtonWidth();
								}
								initButton("body");
								tabs.data('html','').tabs('select',0);
								$.jLoading('stop');
								window.selectTheme(e.theme,true);
							});
						} else {
							$.jError(e.msg);
							$.jLoading('stop');
						}
					},'json');
				}
				return false;
				break;
			case "logout":
				$.jLoading({
					msg:'Выход из системы'
				});
				$.post('user/logout', {
					ajax:true
				}, function(e) {
					if(e.state) {
						//Удаляем все старые добавленные табы
						$('.reg_but').removeClass('hide_');
						var tabs=jQuery('#tabs-content');
						jQuery('li a',jQuery('.login_tab').parent().parent()).each( function(i) {
							if(jQuery(this).hasClass('login_tab'))
								tabs.tabs('remove',$(this).attr('href').replace(/#/,''));
						});
						$('#user_block').hide('slide',400, function() {
							$('#user_info').html(e.html);
							$("#user_block").show('slide',400);

							var tabs = $('#tabs-content');
							//Добавляем табы для гостя
							for(var i in e.tabs) {
								var o  	= e.tabs[i];
								var lb 	= o.lb;
								var html= o.html;

								var prev_tab_but = $('a[href="#'+i+'"]',tabs);

								if(prev_tab_but.length>0)
									tabs.tabs('remove',i);
								tabs.data('html',html);
								tabs.tabs( "add", "#"+i, lb);
								$('a[href="#'+i+'"]',tabs).addClass('login_tab');
							}
							initButton("body");
							tabs.removeData('html');
						});
						//Удаляем все старые добавленные кнопки
						$('.login_but').parent().remove();

						tabs.tabs('select',0);
						$.jLoading('stop');
					} else {
						$.jAlert(e.msg);
					}
				},'json');
				break;
			case "cleareForm":
				$('input[type="text"][!disabled] , input[type="password"][!disabled] , textarea[!disabled]',o.parent().parent()).each( function() {
					$(this).val("");
				});
				break;
			case "closeDialog":
				var dia = getDialogFromChild(o);
				if(dia) {
					dia.dialog('close');
				}
				break;
			case "saveFormData":
				var dia = getDialogFromChild(o);
				if(dia) {
					var form = $('form',dia);
					form.FormData( function() {
						$.jAlert('<div class="ta_j w_300"><p class="t_i_10">Введенная информация сохранена<sup>1</sup>.</p><p class="t_i_10 f_s_12"><sup>1</sup>Информация будет доступна для восстановления в течении 40 мин.</p></div>');
					});
				}
				break;
			case "jAlert":
				var c = opt.content;
				var parent = opt.parent;
				var msg = opt.msg;
				if((c&&c!="")||(msg&&msg!="")) {
					var cont = typeof(c)=="string"?$(c,(parent||self.parent())):(c.length&&c.length>0?c:null);
					if(cont.length&&cont.length>0) {
						msg = cont.html();
					}
					$.jAlert(msg);
				}
				break;
			case "loadFormData":
				var dia = getDialogFromChild(o);
				if(dia) {
					var form = $('form',dia);
					form.FormData('load');
				}
				break;
			default:
				break;
		}
	}).delegate('a','click', function() {
		var o 		= $(this);
		var href 	= o.attr('href');
		if(!o.hasClass('off_a')&&!o.hasClass('but')&&(o.is('[href]')&&href&&href!=""&&href!="#")&&href[0]!='#') {
			var $href = o.attr('href');
			if($href==""||/^mailto:/.test($href))
				return true;
			dia = $.dia({
				width:'auto',
				height:'auto',
				modal:true,
				title:"Ссылка на внешний источник - "+o.text(),
				position:['center','bottom']
			}).bind('dialogShow', function() {
				$.jLoading('stop');
			});
			var size = {
				width:$(document).width()-50,
				height:parseInt(screen.availHeight-screen.availHeight/5)-$('#header').height()
			};
			var iframe = $("<iframe name='www_link' border='0'></iframe>").appendTo(dia).css(size).bind('load', function() {
				dia.dialog('open');
			});
			$.jLoading({
				msg:'Загрузка с другого сайта'
			});
			iframe.attr('src',o.attr('href'));
			return false;
		}
	});
});